package com.zhoug.push.imp;

import android.content.Context;
import android.text.TextUtils;

import androidx.annotation.NonNull;

import com.huawei.hms.aaid.HmsInstanceId;
import com.huawei.hms.common.ApiException;
import com.zhoug.logging.Logger;
import com.zhoug.push.core.IPushService;
import com.zhoug.push.core.PushConfig;
import com.zhoug.push.core.PushVendor;

import java.util.List;

/**
 * 华为推送服务
 * @description: 类的简要描述
 * @author: 35574
 * @date: 2025/11/4 9:22
 */
public class HuaweiPushService implements IPushService {
    private static final String TAG = ">>>>HuaweiPushService";
    private static final String TOKEN_SCOPE = "HCM";
    private Context context;
    private PushConfig config;
    private String alias;
    private List<String> tags;

    /**
     * 初始化推送服务
     *
     * @param context
     * @param config
     */
    @Override
    public void initialize(@NonNull Context context, @NonNull PushConfig config) {
        this.context = context;
        this.config = config;
        // 自动初始化
//        HmsMessaging.getInstance(context).setAutoInitEnabled(true);
    }

    /**
     * 注册推送服务
     */
    @Override
    public void registerPush() {
        new Thread(() -> {
            try {
                //申请token,禁止应用频繁申请Token。对于非常驻应用每次启动时获取Token，对于常驻应用严禁定期频繁申请Token，如果一定要周期申请建议周期大于1天。
                String token = HmsInstanceId.getInstance(context).getToken(config.getAppId(), TOKEN_SCOPE);
                Logger.d(TAG, "getToken: token: " + token);
                // 判断token是否为空
                if (!TextUtils.isEmpty(token)) {
                    PushManager.getInstance().onTokenReceived(token, getVendor());
                }
            } catch (ApiException e) {
                Logger.e(TAG, "获取华为推送token失败:" + e.getMessage());
                PushManager.getInstance().onTokenError(getVendor(), -1, e.getMessage());
            }
        }).start();
    }

    /**
     * 注销推送服务
     */
    @Override
    public void unregisterPush() {
        new Thread(() -> {
            try {
                HmsInstanceId.getInstance(context).deleteToken(config.getAppId(), TOKEN_SCOPE);
                PushManager.getInstance().onTokenRemoved(getVendor());
            } catch (ApiException e) {
                Logger.e(TAG, "unregisterPush:注销华为推送失败 " + e.getMessage());
            }
        }).start();
    }


    /**
     * 获取厂商类型
     *
     * @return
     */
    @Override
    public String getVendor() {
        return PushVendor.HUA_WEI;
    }

    /**
     * 设置别名（用于精准推送）
     *
     * @param alias
     */
    @Override
    public void setAlias(String alias) {
        this.alias = alias;
    }

    /**
     * 设置标签（用于分组推送）
     *
     * @param tags
     */
    @Override
    public void setTags(List<String> tags) {
        this.tags = tags;
    }


}
